package cn.fengliu;

import org.springframework.ui.Model;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class LoginInterceptor implements HandlerInterceptor {
    /**
     *  这个方法触发在请求刚到达后端，处理请求的控制器以及视图解析还未发生作用之前。是我们使用拦截器最常用的一个方法
     *  返回false表示，不通过拦截器，同时你应当准备重定向或者准备相关的返回
     *  返回true则通过拦截器

     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行了@@@@@");
        //获取登录 的信息
        Object user = request.getSession().getAttribute("user");
        //判断登录信息 是否正常
        if(user!=null){
            System.out.println("用户已经登录正常执行");
            return true;
        }else{
            System.out.println("用户没有登录，就转发到登录界面");
           request.getSession() .setAttribute("info","未登录，请先登录");
//            model.addAttribute("info","未登录，请先登录");
            //转发登录界面
            response.sendRedirect("/mark5/go2login");
            return false;
        }
    }

    /**
     * 该方法触发在请求已被控制器处理完毕，返回视图之前，不是很常用，通常是用来完善处理器结果的

     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    /**
     * 这个方法在控制器视图解析全部完成之后，最后执行，通常用来做一些扫尾工作，基本不用
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}
